package com.swu.cx.kotlinmodule;

public class TestGeneric {
    void testSuper() {
//        MyObj<Food> objFood = new MyObj<>();
//        MyObj<Fruit> objFruit = new MyObj<>();
//        MyObj<Apple> objApple = new MyObj<>();
//        MyObj<HongFuShi> objHongfushi = new MyObj<>();
//
//        MyObj<? super Apple> myObj;
//        myObj = objFruit;
//        myObj = objFood;
//        myObj = objHongfushi; // 报错!!!，只能接受限定类型的父类
//
//        // 对泛型元素的操作
//        myObj.setData(new Apple());
//        myObj.setData(new HongFuShi());
//        myObj.setData(new Fruit()); // 报错!!!，这里比较特殊，有点反常理
//        Object data = myObj.getData();

    }

    void testExtends() {
//        MyObj<Food> objFood = new MyObj<>();
//        MyObj<Fruit> objFruit = new MyObj<>();
//        MyObj<Apple> objApple = new MyObj<>();
//        MyObj<HongFuShi> objHongfushi = new MyObj<>();
//
//        MyObj<? extends Fruit> myObj;
//        myObj = objFruit;
//        myObj = objApple;
//        myObj = objHongfushi;
//        myObj = objFood; // 报错，因为extends的限制，只支持Fruit的子类类型
//
//        // 对泛型元素的操作
//        myObj.setData(new Apple()); // 报错，不允许 set元素
//        Fruit data = myObj.getData(); // get的类型只能是限定的类型 Fruit
    }

    public static void main(String[] args) {


//        TestGeneric testGeneric = new TestGeneric();
//        testGeneric.test(obj1);
//        testGeneric.test(obj2);
//        testGeneric.test(obj3);

    }
}
